/**
 * 文件名：@ActionInterceptor.java <br/>
 * 包名：cn.efunbox.afw.web.mvc.interceptor <br/>
 * 项目名：afw-mvc-web <br/>
 * @author xtwin <br/>
 */
package cn.efunbox.afw.web.mvc.interceptor;

import cn.efunbox.afw.core.invocation.Invoker;
import cn.efunbox.afw.core.mvc.context.Context;

/**
 * 类名：ActionInterceptor  <br />
 *
 * 功能：前后公共action拦截器
 *
 * @author xtwin <br />
 * 创建时间：2015年12月3日 下午12:01:48  <br />
 * @version 2015年12月3日
 */
public class ActionInterceptor extends AbstractInterceptor {
	
	/**
	 * 功能:执行前置action列表 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月3日 下午12:02:15<br/>
	 * 
	 * @param context
	 * @param handler
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.mvc.interceptor.AbstractInterceptor#doPreHandle(cn.efunbox.afw.core.mvc.context.Context, java.lang.Object)
	 */
	@Override
	protected void doPreHandle(Context context, Object handler) throws Exception {
		/*if (handler instanceof AfwHandlerMethod) {
			// 执行前置action列表
			executeInvoke(((AfwHandlerMethod) handler).getPreInvokers(), context, handler);
		}*/
		executeInvoke(resolveHandlerInfo(context, handler).getPreInvokers(), context, handler);
	}
	
	/**
	 * 功能:执行后置action列表 <br/>
	 * 
	 * 重写：xtwin <br/>
	 * 
	 * @version ：2015年12月3日 下午12:02:21<br/>
	 * 
	 * @param context
	 * @param handler
	 * @throws Exception <br/>
	 * @see cn.efunbox.afw.web.mvc.interceptor.AbstractInterceptor#doPostHandle(cn.efunbox.afw.core.mvc.context.Context, java.lang.Object)
	 */
	@Override
	protected void doPostHandle(Context context, Object handler) throws Exception {
		/*if (handler instanceof AfwHandlerMethod) {
			// 执行后置列表
			executeInvoke(((AfwHandlerMethod) handler).getPostInvokers(), context, handler);
		}*/
		
		executeInvoke(resolveHandlerInfo(context, handler).getPostInvokers(), context, handler);
	}
	
	/**
	 * 
	 * 功能：运行执行器 <br/>
	 *
	 * @author xtwin <br/>
	 * @version 2015年12月3日 下午12:19:07 <br/>
	 */
	protected void executeInvoke(Invoker[] invokers, Context context, Object handler) throws Exception {
		if (null != invokers && invokers.length > 0) {
			for (Invoker invoker : invokers) {
				invoker.invoke(context);
			}
		}
	}
}